#include <memory>
#include <functional>
#include "UdpServe.hpp"
#include "Route.hpp"
#include "Thread_Pool.hpp"

using task_t = std::function<void()>;

// 服务端先收后发。
int main(int argc,char* argv[])
{
    if(argc != 2)
    {
        return 1;
    }

    LogSpace::LOG(LogSpace::LogLevel::INFO) << "服务端开始执行。";

    uint16_t port = std::stoi(argv[1]);

    Thread_Pool::ThreadPool<task_t>* tp;

    tp = tp->GetInc();

    RouteModule::Route r;

    // 传参
    std::unique_ptr<Socket_Module::Socket> ptr = std::make_unique<Socket_Module::Socket>(port,[&r, &tp](int sockfd, const std::string &message, InetAddrModule::InetAddr&peer)
    {
        task_t t = std::bind(&RouteModule::Route::MessageRoute, &r, sockfd, message, peer);
        tp->Enqueue(t);
    });

    //tp->Start();

    ptr->Init();

    ptr->Start();

    //tp->Join();
    
    return 0;
}

// std::string ClearUp(std::string s)
// {
//     std::string message("Serve Say#");

//     message += s;

//     return message;
// }

// std::string ClearUp(std::string s)
// {
//     Word::Dic dic;

//     dic.AddWord();

//     std::string ret = dic.Translate(s);

//     return ret == "" ? "None" : ret;
// }


// int main(int argc,char* argv[])
// {
//     if(argc != 2)
//     {
//         return 1;
//     }

//     uint16_t prot = std::stoi(argv[1]);

//     Socket_Module::Socket socket(std::stoi(argv[1]),ClearUp);

//     socket.Init();
 
//     socket.Start();

//     return 0;
// }